home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / mdisk25.arj / MXMS.ASC < prev    next >
Encoding:
Text File  |  1994-09-29  |  4.6 KB  |  120 lines

  1. 5. MXMS: ACCESO A LA MEMORIA EXTENDIDA MEDIANTE UN
  2. GESTOR DE MEMORIA
  3.  
  4. A través de este módulo podremos controlar la memoria extendida
  5. y mover bloques de memoria de la memoria convencional a la
  6. memoria extendida y viceversa, la realización de estos programas
  7. en lenguaje Pascal o C necesita o bien de un ensamblador como
  8. Turbo Assembler o MS-Assembler o utilizar los servicios que
  9. proporcionan estos lenguajes para compilar instrucciones en
  10. ensamblador dentro de un fichero de código fuente PASCAL o C ,
  11. este procedimiento también se puede desarrollar de dos maneras:
  12. utilizando la función inline que permite introducir los códigos
  13. de las rutinas en ensamblador o bien introducir directamente las
  14. instrucciones de lenguaje maquina en el programa a través de asm,
  15. independientemente del método elegido, en lenguaje C se suele
  16. producir la llamada en el momento de la compilación a un
  17. ensamblador para que genere el código objeto que luego se
  18. enlazara con los demás módulos de nuestro programa.
  19.      
  20. Habitualmente se utiliza para las llamadas a estas funciones el
  21. estándar XMS versión 2.0 o superior, este es el número de versión
  22. mínimo necesario para que el módulo XMS.PAS funcione.
  23.  
  24. PROCEDIMIENTOS DEL MαDULO
  25.  
  26.  
  27.     Podemos clasificar los procedimientos de este módulo en
  28. varias categorías, los de información, petición y liberación de
  29. memoria, movimiento de bloques de esta e inicialización y
  30. finalización de la gestión de memoria, en cuanto a la utilización
  31. cronológica los podemos dividir así:
  32.  
  33. Procedimientos de inicialización
  34.  
  35.  
  36.      Function Inicializa_Xms: Boolean; 
  37.      Devuelve true o false dependiendo de si se ha
  38.      inicializado correctamente la gestión de memoria XMS
  39.      o no.
  40.      
  41. Procedimientos de búsqueda de Información
  42.  
  43.  
  44.      Procedure Cantidad_Xms_Libre(Var
  45. Totalxms,Bloque_Max:Integer); 
  46.      Devuelve la cantidad de memoria extendida o ampliada
  47.      disponible y el bloque mas grande de esta en Kb.
  48.      Procedure Xms_Info( Handle    : Integer; Var Lock,
  49. Akilobytes : Integer;
  50.      Var Freeh : Integer ); 
  51.           Devuelve información sobre un bloque
  52.           determinado de memoria extendida
  53.           identificado por el número de handle que se
  54.           pasa en la variable  Handle, dicho número se
  55.           tiene que haber obtenido mediante la
  56.           ejecución exitosa de la función Function
  57.           Nuevo_Bloque(Akilobytes:Integer):Integer;
  58.           que devuelve el  número de handle antes
  59.           aludido.
  60.  
  61.  
  62. Procedimientos de manejo de bloques
  63.  
  64.  
  65.      Function Nuevo_Bloque(Akilobytes:Integer):Integer;
  66.  
  67.      Reserva un bloque de memoria extendida identificado
  68.      por un numero llamado handle o manipulador que es
  69.      devuelto por la función.
  70.  
  71.      Procedure Dispon_Bloque(Handle:Integer);
  72.  
  73.      Libera un bloque de memoria extendida con el número
  74.      Handle.
  75.  
  76.      Function
  77. Cambiar_Tamano_Bloque(Handle,Nuevos_Kilobytes:Integer):
  78.      Boolean;
  79.  
  80.      Cambia el tamaño de un bloque de memoria extendida
  81.      identificado por la variable Handle y de un nuevo
  82.      tamaño de Nuevos_Kilobytes en un entero.
  83.  
  84.      Procedure Mover_Bloque_Emb(Fhandle:Integer;Foffset:Longint;
  85.      Dhandle:Integer;Doffset:Longint; Longitud:Longint);
  86.  
  87.      Mueve un bloque de memoria desde memoria extendida a
  88.      convencional y viceversa y entre memoria extendida
  89.      entre sí.    
  90.  
  91.  
  92.      Function Bloquea_Bloque_Emb( Handle : Integer ) : Longint; 
  93.  
  94.      El gestor de memoria XMS maneja la memoria de forma
  95.      dinámica para que haya siempre el mayor bloque de
  96.      memoria extendida disponible, por esta razón se
  97.      utilizan los handles en vez de la dirección de los
  98.      bloques de memoria para operar con ellos, si se quiere
  99.      impedir que un bloque sea cambiado en su dirección en
  100.      la memoria por el gestor se acude a esta función con
  101.      el número de handle del bloque correspondiente,
  102.      devuelve un entero de 32 bits que es su dirección en
  103.      la memoria.  (normalmente a efectos meramente
  104.      informativos ).
  105.  
  106.      Procedure Desbloquea_Bloque_Emb( Handle : Integer );
  107.  
  108.      Permite que un bloque de memoria extendida sea movido
  109.      por el gestor de memoria XMS.
  110.  
  111. El procedimiento de llamada a los servicios XMS solo se puede
  112. realizar con una llamada lejana a una dirección que nos devuelve
  113. la interrupción del multiplexor ( int 2fh ), con el número de
  114. función 43h y de subfunción 10h (la subfunción 00 h es para
  115. averiguar si hay un controlador de memoria XMS ), este
  116. procedimiento choca con dificultades al ser implementado en un
  117. lenguaje de alto nivel teniendo que recurrir en este caso a la
  118. utilización del ensamblador.
  119.  
  120.